package org.jeecg.access.platform.entity.publish;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * @description: 媒体-平台映射实体类
 * 映射数据库表：platform_media_mapping
 * 功能：记录系统内媒体资源在外部平台的适配信息（如平台侧ID、URL、有效期等），
 * 解决同一媒体在不同平台有不同标识的问题，支持媒体资源跨内容复用
 * @author: taogang
 * @date: 2025/8/11 16:20
 */
@Data
@TableName("platform_media_mapping")
public class MediaMapping implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 映射记录ID
     * 数据库主键，唯一标识一条"媒体-平台"的关联记录
     * 生成规则：建议使用UUID或雪花算法，确保分布式环境下唯一
     * 示例："media_mapping_987654321"
     */
    @Id
    private String id;

    /**
     * 发布账号ID
     * 关联系统内的平台账号ID（如微信账号、抖音账号），对应账号管理表
     * 业务意义：同一媒体在同一平台的不同账号下，可能有不同的平台侧标识（如微信不同账号上传的图片media_id不同）
     * 示例："account_wx_1001"（微信平台的某账号）
     */
    @Column(name = "account_id")
    private String accountId;

    /**
     * 系统内媒体ID
     * 关联本系统的媒体资源ID（对应platform_media表的id）
     * 作用：建立"系统内媒体-平台适配信息"的关联，支持通过媒体ID查询所有平台的适配记录
     * 示例："media_12345"（系统内上传的某张图片）
     */
    @Column(name = "media_id")
    private String mediaId;

    /**
     * 平台侧媒体ID
     * 外部平台返回的媒体唯一标识（如微信的media_id、抖音的item_id）
     * 业务意义：部分平台要求发布内容时使用其内部媒体ID（而非URL），如微信公众号需先上传图片获取media_id
     * 示例："wx_media_67890"（微信平台返回的图片ID）
     */
    @Column(name = "platform_media_id")
    private String platformMediaId;

    /**
     * 平台侧媒体URL
     * 媒体资源在外部平台的访问地址（部分平台直接返回URL，无需ID）
     * 适用场景：微博、小红书等平台支持直接使用URL引用图片/视频
     * 与platform_media_id的关系：两者至少有一个不为空，根据平台接口特性存储
     * 示例："https://weibo.com/media/abc123.jpg"（微博平台的图片URL）
     */
    @Column(name = "url")
    private String url;

    /**
     * 平台类型编码
     * 标识媒体适配的目标平台，与内容发布的平台类型保持一致
     * 详细见PlatformType
     * 作用：区分不同平台的媒体适配规则，避免跨平台混用标识
     */
    @Column(name = "platform_type")
    private String platformType;

    /**
     * 平台上传时间
     * 媒体资源上传到外部平台的时间，格式：yyyyMMddHHmmss
     * 作用：记录媒体在平台的生命周期起点，辅助判断资源有效性
     * 示例："20241001103000"（2024-10-01 10:30:00上传到抖音）
     */
    @Column(name = "publish_time")
    private String publishTime;

    /**
     * 平台资源过期时间
     * 部分平台的媒体资源有有效期（如微信临时素材有效期3天），格式：yyyyMMddHHmmss
     * 作用：
     * 1. 过期前自动重新上传，避免发布时资源失效
     * 2. 清理过期的平台侧资源记录，减少存储冗余
     * 特殊值：永久有效时为null或"99991231235959"
     * 示例："20241004103000"（3天后过期）
     */
    @Column(name = "expire_time")
    private String expireTime;
}
